FE EE EF 为核心帧头;对讲机响应帧以 FE EF EE 为核心帧头。0xFE作为前导字符,其主要作用是为设备(对讲机)从休眠中唤醒和进行字节流同步。读写操作针对对讲机外置SPI Flash的以下绝对地址范围(定义于固件源码):
0x8000 (十进制 32768)0x21000 (十进制 135168)核心帧头为3字节固定值:FE EE EF。其前必须包含数量≥1的0xFE用于同步与唤醒。
核心响应帧头为3字节固定值:FE EF EE。其前必须包含数量≥1的0xFE。
| 字段 | 长度 | 说明 | 转义要求 |
|---|---|---|---|
| 请求帧头 | 3字节 | 核心帧头固定为 FE EE EF,其前方为数量≥1的0xFE前导符。 | 不转义 |
| 响应帧头 | 3字节 | 核心帧头固定为 FE EF EE,其前方为数量≥1的0xFE前导符。 | 不转义 |
| 命令字(CMD) | 1字节 | 标识操作,见第5节 | 不转义 |
| 数据域 | 变长 | 命令参数/数据,格式见第5节 | 需要转义 |
| 校验和(LRC) | 1字节 | 纵向冗余校验值 | 需要转义 |
| 帧尾 | 1字节 | 固定 0xFD | 不转义 |
防止数据域及LRC字节在传输过程中与帧控制字符(0xFE, 0xEF, 0xEE, 0xFD)或转义字符(0xFF)冲突。
转义范围:仅对数据域和LRC的每个原始字节进行转义,命令字不转义。
| 命令字 | 功能描述 | 请求数据域(原始) | 成功响应 | 关键说明 |
|---|---|---|---|---|
| 0xE0 | 获取设备信息 | 7字节机型字符串 | 0xE1 + 71B设备信息 | 握手命令,必须发送"UVL-15W" |
| 0xE1 | 设备信息响应 | 71字节设备信息 | (无) | 响应0xE0,具体格式见5.2节 |
| 0xE2 | 开始读频 | 8字节地址范围 | "READ START OK" | 需读权限(Clone_Read_Allow==true) |
| 0xE3 | 开始写频 | 8字节地址范围 | "WRITE START OK" | 需写权限(Clone_Write_Allow==true) |
| 0xE4 | 写单条数据 | 6+N字节(地址+长度+数据) | 0xE6 + "WF OK"+回显地址长度 | 必须在0xE3之后 |
| 0xE5 | 读写频完成 | 不同字符串(见5.7节) | "Reboot" | 发送后对讲机会重启 |
| 0xE6 | 读单条数据 | 6字节(地址+长度) | 0xE4 + 回显地址长度 + 数据 | 支持分片传输(若长度>128) |
| 0xE7 | 密码校验 | 9字节(类型+密码) | 密码对错字符串 | 需密码校验 |
| 0xEE | 通用错误 | 错误描述字符串 | (无) | 帧错误、LRC错误、命令错误等,见5.10节 |
"UVL-15W" 的ASCII码 {0x55,0x56,0x4C,0x2D,0x31,0x35,0x57}。FE FE EE EF E0 D5 D6 CC AD B1 B5 D7 9F FD响应CMD 0xE0的握手请求。数据域为71字节的原始设备信息,其结构(字节偏移与长度)定义如下:
| 字节偏移 | 长度 | 字段名 | 说明与取值 |
|---|---|---|---|
| 0 | 7 | 机型字符串 | "UVL-15W" (ASCII) |
| 7 | 1 | 分隔符 | '_' (0x5F) |
| 8 | 1 | 子机型号 | 固定为 0x01 |
| 9 | 1 | 分隔符 | '_' (0x5F) |
| 10 | 1 | 读频保护标志 | 0x00=允许读,0x01=需密码 |
| 11 | 1 | 写频保护标志 | 0x00=允许写,0x01=需密码 |
| 12 | 8 | 软件版本 | 8字节软件版本信息 |
| 20 | 1 | 分隔符 | '_' (0x5F) |
| 21 | 3 | 图片资源版本号 | 格式: {主, 次, 修订},示例: {0x01, 0x00, 0x00} |
| 24 | 12 | CPU唯一ID | 12字节CPU唯一标识符 |
| 36 | 16 | Bootloader机型信息 | 16字节Bootloader存储的机型信息 |
| 52 | 9 | 硬件版本(解密后) | 9字节解密后的硬件版本字符串 |
| 61 | 20 | 序列号(解密后) | 20字节解密后的序列号字符串 |
注意:上位机收到此响应后,应检查字节10和11的读写保护标志,以决定后续流程是否需要进行密码验证(CMD 0xE7)。
0x8000-0x21000范围内。0x8000 (大端: 0x00 0x00 0x80 0x00)0x21000 (大端: 0x00 0x02 0x10 0x00){0x00, 0x00, 0x80, 0x00, 0x00, 0x02, 0x10, 0x00}{0x80, 0x80, 0x00, 0x80, 0x80, 0x82, 0x90, 0x80}0x00+0x00+0x80+0x00+0x00+0x02+0x10+0x00=0x92,补码0x6E,转义后0x6E+0x80=0xEE。"READ START OK" (已转义)。0x8000 (大端: 0x00 0x00 0x80 0x00)0x21000 (大端: 0x00 0x02 0x10 0x00){0x00, 0x00, 0x80, 0x00, 0x00, 0x02, 0x10, 0x00}{0x80, 0x80, 0x00, 0x80, 0x80, 0x82, 0x90, 0x80}0x00+0x00+0x80+0x00+0x00+0x02+0x10+0x00=0x92,补码0x6E,转义后0x6E+0x80=0xEE。"WRITE START OK" (已转义)。6 + N 字节。
0x8000写入512字节数据。
0x8000 → 大端字节: {0x00, 0x00, 0x80, 0x00}512 (0x0200) → 大端字节: {0x02, 0x00}0x00递增至0xFF,循环两次。{0x00, 0x01, 0x02, ..., 0xFD, 0xFE, 0xFF, 0x00, 0x01, ..., 0xFD, 0xFE, 0xFF}
+0x80操作。对于结果大于0xF9的字节,需使用0xFF进行特殊转义。S。LRC_raw = 0x100 - S。LRC_escaped = LRC_raw + 0x80 (若结果≤0xF9),或进行0xFF转义。"WF OK" (5字节) + 回显的地址(4字节) + 回显的长度(2字节)。"Read Complete" (13字节,不含结束符)"Write Complete" (14字节,不含结束符)"Read Complete" → ASCII: {0x52, 0x65, 0x61, 0x64, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x6C, 0x65, 0x74, 0x65}+0x80操作。"Write Complete" → ASCII: {0x57, 0x72, 0x69, 0x74, 0x65, 0x20, 0x43, 0x6F, 0x6D, 0x70, 0x6C, 0x65, 0x74, 0x65}+0x80操作。"Reboot" (已转义)。对讲机在发送此响应后延迟约400ms将自动重启,上位机需准备重连。0x00000000读取0x0800(2048)字节。
{0x00,0x00,0x00,0x00, 0x08,0x00}+0x80操作。FE FE EE EF E6 80 80 00 80 88 80 F8 FD0xE4帧(无0xFD帧尾),包含回显地址、回显长度及前128字节(或更少)数据。0xFD,构成一个完整帧的结束。0x00=校验读频密码,0x01=校验写频密码。0xFF填充。"Read Password Right""Read Password Error""Write Password Right""Write Password Error"当对讲机在解析或处理上位机请求时遇到错误,将以此命令响应。上位机必须妥善处理这些错误,以实现健壮的通信。错误信息字符串(已转义)及触发条件如下:
| 错误信息 (原始ASCII) | 触发条件 | 上位机处理建议 |
|---|---|---|
"Frame Head Error" | 接收到的数据帧,其核心帧头(FE EE EF)不正确。 | 检查发送的帧头格式,或确认链路是否受到干扰。 |
"Frame Tail Error" | 接收到的数据帧,其帧尾字节不是0xFD。 | 检查帧结构完整性,或确认数据在传输中是否被截断。 |
"Frame Length Error" | 接收到的数据帧总长度过短(<5字节),不构成有效帧。 | 检查发送数据是否完整。 |
"Frame Lrc Error" | 接收到的数据帧,其LRC校验失败。 | 检查数据域转义算法和LRC计算算法是否正确。上位机应尝试重发先前未成功的请求。此为常见错误。 |
"Option Value Error" | 接收到的命令字(CMD)无法识别,或CMD 0xE8的子功能码无法识别。 | 检查发送的命令字是否正确,或确认电台固件版本是否支持该命令。 |
"Frame Lrc Error"导致读/写某块数据失败,上位机应重发对应的0xE6或0xE4命令。
"UVL-15W") // 握手"READ START OK" // 确认"Read Complete") // 读频完成"Reboot" // 电台将重启"UVL-15W") // 握手"WRITE START OK" // 确认"WF OK"+地址+长度) // 写确认"Write Complete") // 写频完成"Reboot" // 电台将重启FE EE EF,其前需发送数量≥1的0xFE用于设备唤醒和字节同步。期待响应帧核心帧头为FE EF EE。+0x80),命令字不转义。注意0xFF转义序列。0x8000 (32768) 至 0x21000 (135168) 之间。CMD 0xE2和CMD 0xE3命令中发送的整个有效地址范围(0x8000-0x21000)用于对讲机识别操作的整体大小,上位机可据此计算并显示进度。0xE6 0xE4命令响应分片数据的组装逻辑。根据首包中的长度字段,持续接收后续数据块。CMD 0xEE错误响应。对于"Frame Lrc Error"等传输错误,上位机应实现相应命令的重发机制,并设置合理的超时与重试次数限制。0xE5命令(读频完成发送"Read Complete",写频完成发送"Write Complete")会导致电台重启,这是正常流程。